package com.imm.persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;





import com.imm.persistencia.Constants;
import com.imm.persistencia.DBConn;
import com.imm.dominio.Agencia;
import com.imm.dominio.Usuario;
import com.imm.dominio.Venta;

public class PersistenciaImp implements IPersistencia {
	
   private PersistenciaImp(){};
	
	private static PersistenciaImp instancia = new PersistenciaImp();
	
	public static PersistenciaImp getInstance(){
		return instancia;
	} 

	public Venta AltaVenta(Venta venta) throws SQLException {
		
        String sql_idVenta = "SELECT valor FROM Configuracion WHERE parametro='Id_Ventas' LIMIT 1";
		
		Double id_idVenta = (double) 1;
		
		PreparedStatement ps = null;
		PreparedStatement ps1 = null;
		Connection con = null;
		Statement stmt = null;
		ResultSet rs_idVenta = null;
		
		con = DBConn.DataSourceCon();
		con.setAutoCommit(false);
		
		try {
			stmt = con.createStatement();
			rs_idVenta =stmt.executeQuery(sql_idVenta);
			
			while(rs_idVenta.next()) {
				id_idVenta = Double.valueOf(rs_idVenta.getString("valor")); //.valueOf(rs_idTerminal.getString("valor"));
			}
			
			id_idVenta +=1;
			
			String sql_addventa = "INSERT INTO Ventas (Id_Ticket, Matricula, FechaVenta,FechaInicio,Minutos,Importe,Id_Agencia) VALUES(?, ?, ?,?,?, ?,?)";
			String sql_increidventa = "UPDATE configuracion SET valor =" + id_idVenta.toString() + " WHERE parametro='"+Constants.getIdVentas()+"'";
			
			ps = con.prepareStatement(sql_addventa);
			ps1 = con.prepareStatement(sql_increidventa);
			SimpleDateFormat formatd = new SimpleDateFormat("yyyy-MM-dd");
		
			ps.setDouble(1, id_idVenta);         
			ps.setString(2, venta.getMatricula());
			ps.setString(3, formatd.format(venta.getFechaVenta()));			
			ps.setString(4, formatd.format(venta.getFechaInicio()));
			ps.setInt(5, venta.getMinutos());
			ps.setDouble(6, venta.getImporte());
			ps.setDouble(7, venta.getIdAgencia());
			ps = con.prepareStatement(sql_addventa);

			ps.executeUpdate();
			ps1.executeUpdate();
			
			con.commit();
			return venta;
			
		} catch (Exception e) {
			System.out.println(e.getMessage());	
					
		}finally {
			if(rs_idVenta != null) rs_idVenta.close();
			if(stmt != null) stmt.close();
			con.setAutoCommit(true);
			if(con != null) con.close();			
		}
		return null;
		
		
	}

	public boolean AnularVentaBD(Venta venta) {		
		return false;
	}

	public boolean IngresarUsuarioBD(Usuario usuario) {
		return false;
	}

	public boolean ModificarUsuarioBD(Usuario usuario) {
	
		return false;
	}

	public boolean IngresarAgenciaBD(Agencia agencia) throws SQLException { //sdc 13/11/12
		
		String sql_idAgencia = "SELECT valor FROM Configuracion WHERE parametro='Id_Agencias' LIMIT 1";
		
		Double id_idAgencia = (double) 1;
		PreparedStatement ps = null;
		PreparedStatement ps1 = null;
		Connection con = null;
		Statement stmt = null;
		ResultSet rs_idAgencia = null;
		
		con = DBConn.DataSourceCon();
		con.setAutoCommit(false);
		
		try {
			stmt = con.createStatement();
			rs_idAgencia =stmt.executeQuery(sql_idAgencia);
			while(rs_idAgencia.next()) {
				id_idAgencia = Double.valueOf(rs_idAgencia.getString("valor")); 
			}
			id_idAgencia +=1;
			String sql_addagencia = "INSERT INTO Agencias (id, nombre, domicilio, telefono) VALUES(?, ?, ?, ?)";
			String sql_increidagencia  = "UPDATE configuracion SET valor =" + id_idAgencia .toString() + " WHERE parametro='"+Constants.getIdAgencias()+"'";
			
			ps = con.prepareStatement(sql_addagencia);
			ps1 = con.prepareStatement(sql_increidagencia);
			
			ps.setDouble(1, id_idAgencia);         
			ps.setString(2, agencia.getNombre());
			ps.setString(3, agencia.getDomicilio());
			ps.setString(4, agencia.getTelefono());
			ps1.executeUpdate();
			ps.executeUpdate();
		
			con.commit();
			return true;
			
		} catch (Exception e) {
			System.out.println(e.getMessage());
			return false;
					
		}finally {
			if(rs_idAgencia != null) rs_idAgencia.close();
			if(stmt != null) stmt.close();
			con.setAutoCommit(true);
			if(con != null) con.close();
			
		}
	
		
	}

	public boolean ModificarAgenciaBD(Agencia agencia) {
		return false;
	}

	public double ObtenerMontoBD(int minutos) {
		return 0;
	}

	public boolean ExisteUsuarioBD(String us, String pass) throws SQLException { 
		
		String sql_ExisteUsrTer = "SELECT COUNT(*) AS Cantidad  "; 
		sql_ExisteUsrTer += " FROM Usuarios";
		sql_ExisteUsrTer += " WHERE Usuarios.Usuario = ? AND Usuarios.Password = ? ";
		
		PreparedStatement sql_statement = null;
		Connection con = null;
		ResultSet rs_eUser = null;
		Integer count ;
		con = DBConn.DataSourceCon();
		con.setAutoCommit(false);
		
			sql_statement = con.prepareStatement(sql_ExisteUsrTer);
			sql_statement.setString(1, us);            
			sql_statement.setString(2, pass);
		
			rs_eUser = sql_statement.executeQuery();
			rs_eUser.beforeFirst();
			rs_eUser.next();
			count = rs_eUser.getInt(1);
		    rs_eUser.close();
			con.close();
			if(count!=0 ) {
				
				return true;
			}else{
				
				return false;
			}
		
	}

	public boolean BuscarAgenciaBD(Agencia agencia) {
		return true;
	}

}
